package com.dyz.swordFingerOffer;

public class StrToInt67 {
    public static void main(String[] args) {
        int res = new StrToInt67().strToInt("   -42");
        System.out.println(res);
    }
    public int strToInt(String str) {
        //创建sign变量来存储下标
        int sign = 0;
        //获取字符串长度
        int len = str.length();
        //将字符串转换为数组
        char[] arr = str.toCharArray();
        //去除空格
        while (sign < len && arr[sign] == ' ') {
            sign++;
        }
        //去掉空格直接到末尾
        if (sign == len) {
            return 0;
        }
        //判断正负号
        boolean b = false;
        if (arr[sign] == '-') {
            b = true;
            sign++;
        } else {
            if (arr[sign] == '+') {
                sign++;
            } else if (!Character.isDigit(arr[sign])) {
                // 其他符号
                return 0;
            }
        }
        //字符串转数字
        int ans = 0;
        while (sign < len && Character.isDigit(arr[sign])) {
            int digit = arr[sign] - '0';
            if (ans > (Integer.MAX_VALUE - digit) / 10) {
                // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
                // 但是 *10 和 + digit 都有可能越界，所有都移动到右边去就可以了。
                return b? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            ans = ans * 10 + digit;
            sign++;
        }
        return b? -ans : ans;
    }
}
